package com.niit.qcx.commAgePrice;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

/**数据中包含的字段
 *title comm  total_price unit_price  no_room  area  orientations  floor  year  address	county	town  tags  broker	rate  company
 *考察各小区房屋的平均房龄与价格的相关性
 * Mapper阶段：
 * 提取小区名称（comm）、建造年份（year）和价格（总价total_price）。
 * 去除年份字段中的“建造的”只留下数字以便计算
 * 以小区名称作为键，年份和价格组成的自定义数据结构（commAPBean）作为值输出。例如，输出<香水鸿门,[2016,95万]>。
 */
public class commAPMapper extends Mapper<LongWritable, Text, Text, commAPBean> {
    private Text outKey = new Text();
    private commAPBean outValue = new commAPBean();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        String line = value.toString();//获取行
        String[] fields = line.split("\t");//以制表符分割

        if (key.get() == 0) {// 跳过标题行
            return;
        }

        if (fields.length >= 9) {

        String commName = fields[1];
        String yearStr = fields[8];
        String totalPriceStr = fields[2];

        if (yearStr.isEmpty() || totalPriceStr.isEmpty()) {//判断所需字段是否为空
            return;//忽略缺少年份或总价的行
        }
        //year字段的数值为 例：2015年建造                 去掉“年建造”只要数值部分来计算
        int year = Integer.parseInt(yearStr.replace("年建造", ""));
        float totalPrice = Float.parseFloat(totalPriceStr);

        outKey.set(commName);
        outValue.set(year, totalPrice);
        context.write(outKey, outValue);
        }
    }
}

